
package com.platform.server.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

import org.junit.Test;

/* *
 *类名：UtilDate
 *功能：自定义订单类
 *详细：工具类，可以用作获取系统日期、订单编号等
 *版本：1.0
 *日期：2016-06-06
 *说明：
 *以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用，只是提供一个参考。
 */
public class DateUtils {
	
    /** 年月日时分秒(无下划线) yyyyMMddHHmmss */
    public static final String dtLong                  = "yyyyMMddHHmmss";
    
    /** 完整时间 yyyy-MM-dd HH:mm:ss */
    public static final String simple                  = "yyyy-MM-dd HH:mm:ss";
    
    /** 年月日(无下划线) yyyyMMdd */
    public static final String dtShort                 = "yyyyMMdd";
    
    public static final String dtShort1                 = "yyyy-MM-dd";
	
    
    /**
     * 返回系统当前时间(精确到毫秒),作为一个唯一的订单编号
     * @return
     *      以yyyyMMddHHmmss为格式的当前系统时间
     */
	public  static String getOrderNum(){
		Date date=new Date();
		DateFormat df=new SimpleDateFormat(dtLong);
		return df.format(date);
	}
	
	/**
	 * 获取系统当前日期(精确到毫秒)，格式：yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public  static String getDateFormatter(){
		Date date=new Date();
		DateFormat df=new SimpleDateFormat(simple);
		return df.format(date);
	}
	
	/**
	 * 获取系统当期年月日(精确到天)，格式：yyyyMMdd
	 * @return
	 */
	public static String getDate(){
		Date date=new Date();
		DateFormat df=new SimpleDateFormat(dtShort1);
		return df.format(date);
	}
	
	/**
	 * 产生随机的三位数
	 * @return
	 */
	public static String getThree(){
		Random rad=new Random();
		return rad.nextInt(1000)+"";
	}
	
	/**
	   * 计算两个日期相差的天数
	   * @param smdate
	   * @param bdate
	   * @return
	   * @throws ParseException
	   */
	  public static int daysBetween(Date smdate,Date bdate)    
	    {    
	        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
	        try {
	      smdate=sdf.parse(sdf.format(smdate));  
	      bdate=sdf.parse(sdf.format(bdate));
	    } catch (Exception e) {
	    }  
	        Calendar cal = Calendar.getInstance();    
	        cal.setTime(smdate);    
	        long time1 = cal.getTimeInMillis();                 
	        cal.setTime(bdate);    
	        long time2 = cal.getTimeInMillis();         
	        long between_days=(time2-time1)/(1000*3600*24);  
	            
	       return Integer.parseInt(String.valueOf(between_days));           
	    }
	
	  /**
	   * 查看某个日期的前几天
	   * @param specifiedDay	日期
	   * @param d	天数
	   * @return	specifiedDay日期的前面天数
	   * @throws ParseException
	   */
	  public static String getSpecifiedDayBefore(String specifiedDay,int d) throws ParseException{ 
		  Calendar c = Calendar.getInstance(); 
		  Date date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay); 
		  int day=c.get(Calendar.DATE); 
		  System.out.println(day);  
		  c.set(Calendar.DATE,day - d); 
		  String dayBefore=new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); 
		  return dayBefore; 
	  } 
	  
	  @Test
	  public void test() throws ParseException{
		  // 时间表示格式可以改变，yyyyMMdd需要写例如20160523这种形式的时间
	        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	        String str = "2018-02-10";
	        // 将字符串的日期转为Date类型，ParsePosition(0)表示从第一个字符开始解析
	        Date date = sdf.parse(str, new ParsePosition(0));
	        Calendar calendar = Calendar.getInstance();
	        calendar.setTime(date);
	        // add方法中的第二个参数n中，正数表示该日期后n天，负数表示该日期的前n天
	        calendar.add(Calendar.DATE, 5);
	        Date date1 = calendar.getTime();
	        String out = sdf.format(date1);
	        System.out.println(out);
	  }
	  
	  public static String getSpecifiedDayBefore2(String specifiedDay, int d)
			    throws ParseException
			  {
			    Calendar c = Calendar.getInstance();
			    Date date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
			    int day = c.get(5);
			    System.out.println(day);
			    c.set(5, day + d);
			    String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
			    return dayBefore;
			  }
}
